package com.androidjam.runningacoruna;

import java.util.ArrayList;

import org.ksoap2.SoapEnvelope;
import org.ksoap2.serialization.SoapObject;
import org.ksoap2.serialization.SoapSerializationEnvelope;
import org.ksoap2.transport.HttpTransportSE;

import com.androidjam.runningacoruna.Track.TYPE;
import com.google.android.maps.GeoPoint;



public class FuncionalidadesServiceWeb {
	
	//funcionalidad  relacionada con el servicio web,"getUsuarios"
	static final ArrayList<Track> registros(){
		
		//Espacio de nombres utilizado en nuestro servicio web.
		final String NAMESPACE = "http://dadire.androidjam.com/";
		//Dirección URL para realizar la conexión con el servicio web.
		final String URL ="http://10.10.50.150:8080/WebServiceRUNNING/services/implementa_runnerSEIPort";
		//nombre del método web concreto que vamos a ejecutar.
		final String METHOD_NAME = "getTracks";
		//Equivalente al anterior, pero en la notación definida por SOAP.
		final String SOAP_ACTION = "http://dadire.androidjam.com/getTracks";
		
		//1.Creamos Peticion (request) a nuestro método web "getUsuarios"
		SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);
		//2.Creamos contenedor SOAP(envelope) y asociarle nuestra petición.
		SoapSerializationEnvelope envelope =
			    new SoapSerializationEnvelope(SoapEnvelope.VER11);
		//Indicamos que es un servicio web, en mi caso no lo es, pongo a false	 
		envelope.dotNet = false;
	    envelope.setOutputSoapObject(request);
	    //3.Creamos el objeto encargado de la comunicación HTTP con el servidor
	    HttpTransportSE transporte = new HttpTransportSE(URL);
	    
	    try {
	    	//aqui es donde expulsamos la clase usuario
	    	transporte.call(SOAP_ACTION, envelope);
	    	//Se procesa el resultado devuelto
	    	//Recibimos del servicio web un objecto soapObject
	    	SoapObject resSoap =(SoapObject)envelope.bodyIn;//para mostrar objetos hay que usar bodyIN
	    	//Creamos un array del tamaño
	    	ArrayList<Track> listaTracks = new ArrayList<Track>();
	    	//Bucle que recupera los usuario registrados en el ServiceBikeRunners
	    	for(int i=0; i<resSoap.getPropertyCount(); i++)
	    		{
	    		SoapObject ic = (SoapObject)resSoap.getProperty(i);
	    			    			   
	    		
	    		
	    		ArrayList<Puntos> listaPuntos = ((ArrayList<Puntos>)ic.getProperty(8));
	    		GeoPoint p = new GeoPoint(listaPuntos.get(0).getLatitud(),listaPuntos.get(0).getLongitud());
	    		Track track = new Track((String)ic.getProperty(0),p,(String)ic.getProperty(1),(TYPE)ic.getProperty(2));
	    		
	    		track.setEstimatedTime((Integer)ic.getProperty(3));
	    		track.setDistance((Integer)ic.getProperty(4));
	    		track.setElevation((Integer)ic.getProperty(5));
	    		track.setHeart_rythm((Integer)ic.getProperty(6));
	    		track.setCalories((Integer)ic.getProperty(7));
	    		ArrayList<GeoPoint> listGeop = new ArrayList<GeoPoint>();
	    		listGeop.add(p);
	    		for(int k = 1;k<listaPuntos.size();k++){
	    			p = new GeoPoint(listaPuntos.get(k).getLatitud(),listaPuntos.get(k).getLongitud());
	    			listGeop.add(p);
	    		}
	    		
	    		
	    		listaTracks.add(track);
	    		}
	    		
	    		return listaTracks;
	    	
	    	} catch (Exception e)		
	    	{
	    		e.printStackTrace();
	    		//datosUsuarioLogin.setText("ERROR¡");
	    		//datosUsuarioNombre.setText("ERROR2!");
	    		return null;
	    	}
		
		}//fin funcionalidad relacionada "getUsuarios"
	
	static final ArrayList<Track> registros2(){
		
		//Espacio de nombres utilizado en nuestro servicio web.
		final String NAMESPACE = "http://dadire.androidjam.com/";
		//Dirección URL para realizar la conexión con el servicio web.
		final String URL ="http://10.10.50.150:8080/WebServiceRUNNING/services/implementa_runnerSEIPort";
		//nombre del método web concreto que vamos a ejecutar.
		final String METHOD_NAME = "getTracks";
		//Equivalente al anterior, pero en la notación definida por SOAP.
		final String SOAP_ACTION = "http://cxf.dadire.com/getUsuarios";
		
		//1.Creamos Peticion (request) a nuestro método web "getUsuarios"
		SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);
		//2.Creamos contenedor SOAP(envelope) y asociarle nuestra petición.
		SoapSerializationEnvelope envelope =
			    new SoapSerializationEnvelope(SoapEnvelope.VER11);
		//Indicamos que es un servicio web, en mi caso no lo es, pongo a false	 
		envelope.dotNet = false;
	    envelope.setOutputSoapObject(request);
	    //3.Creamos el objeto encargado de la comunicación HTTP con el servidor
	    HttpTransportSE transporte = new HttpTransportSE(URL);
	    
	    try {
	    	//aqui es donde expulsamos la clase usuario
	    	transporte.call(SOAP_ACTION, envelope);
	    	//Se procesa el resultado devuelto
	    	//Recibimos del servicio web un objecto soapObject
	    	SoapObject resSoap =(SoapObject)envelope.bodyIn;//para mostrar objetos hay que usar bodyIN
	    	//Creamos un array del tamaño
	    	ArrayList<Track> listaTracks = new ArrayList<Track>();
	    	//Bucle que recupera los usuario registrados en el ServiceBikeRunners
	    	for(int i=0; i<resSoap.getPropertyCount(); i++)
	    		{
	    		SoapObject ic = (SoapObject)resSoap.getProperty(i);
	    			    			   
	    		
	    		
	    		ArrayList<Puntos> listaPuntos = ((ArrayList<Puntos>)ic.getProperty(8));
	    		GeoPoint p = new GeoPoint(listaPuntos.get(0).getLatitud(),listaPuntos.get(0).getLongitud());
	    		Track track = new Track((String)ic.getProperty(0),p,(String)ic.getProperty(1),(TYPE)ic.getProperty(2));
	    		
	    		track.setEstimatedTime((Integer)ic.getProperty(3));
	    		track.setDistance((Integer)ic.getProperty(4));
	    		track.setElevation((Integer)ic.getProperty(5));
	    		track.setHeart_rythm((Integer)ic.getProperty(6));
	    		track.setCalories((Integer)ic.getProperty(7));
	    		ArrayList<GeoPoint> listGeop = new ArrayList<GeoPoint>();
	    		listGeop.add(p);
	    		for(int k = 1;k<listaPuntos.size();k++){
	    			p = new GeoPoint(listaPuntos.get(k).getLatitud(),listaPuntos.get(k).getLongitud());
	    			listGeop.add(p);
	    		}
	    		
	    		
	    		listaTracks.add(track);
	    		}
	    		
	    		return listaTracks;
	    	
	    	} catch (Exception e)		
	    	{
	    		e.printStackTrace();
	    		//datosUsuarioLogin.setText("ERROR¡");
	    		//datosUsuarioNombre.setText("ERROR2!");
	    		return null;
	    	}
		
		}//fin funcionalidad relacionada "getUsuarios"
	
	
	
	/*
	//Funcionalidad relacionada con autenticarse
	Usuario autenticar(String nombreUsuario, String passwordUsuario){
		int i=0;
	    //Espacio de nombres utilizado en nuestro servicio web.
		final String NAMESPACE = "http://cxf.dadire.com/";
		//Dirección URL para realizar la conexión con el servicio web.
		final String URL ="http://10.0.2.2:8080/WebServiceBIKERUNNER/services/UsuariosServiceImplPort";
		//nombre del método web concreto que vamos a ejecutar.
		final String METHOD_NAME = "autenticar";
		//Equivalente al anterior, pero en la notación definida por SOAP.
		final String SOAP_ACTION = "http://cxf.dadire.com/autenticar";
		
		//1.Creamos Peticion (request) a nuestro método web "autenticar"
		SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);
		//Una vez obtenida la peticion, asociamos los datos de nuestros textView
		request.addProperty("arg0", nombreUsuario);
		request.addProperty("arg1", passwordUsuario);
		
		//2.Creamos contenedor SOAP(envelope) y asociarle nuestra petición.
		SoapSerializationEnvelope envelope =
			    new SoapSerializationEnvelope(SoapEnvelope.VER11);
		//Indicamos que es un servicio web, en mi caso no lo es, pongo a false	 
		envelope.dotNet = false;
	    envelope.setOutputSoapObject(request);
	    
	    //3.Creamos el objeto encargado de la comunicación HTTP con el servidor
	    HttpTransportSE transporte = new HttpTransportSE(URL);
	    try
	    {   //aqui es donde expulsamos la clase usuario
	    	transporte.call(SOAP_ACTION, envelope);
	    	//Se procesa el resultado devuelto
	    	//Recibimos del servicio web un objecto soapObject
	    	SoapObject resSoap = (SoapObject)envelope.bodyIn;
	    	//No se muy bien pq lo hago, inicializo i=0, solo devolvera un objeto..
	    	SoapObject ic = (SoapObject)resSoap.getProperty(i);
	    	
	    	//Declaro la clase donde almaceno la clase obtenida del servicio web
	    	//Usuario usuarioLogeado = new Usuario(); 
	    	//Asignamos los atributos del servicio web a nuestra clase.
	    	usuarioLogeado.foto = ic.getProperty(0).toString();//(RUN del thread)
	    	usuarioLogeado.login = ic.getProperty(1).toString();
	    	usuarioLogeado.nombre = ic.getProperty(2).toString();
	    	usuarioLogeado.password = ic.getProperty(3).toString();
	    	
	    	
	    	return usuarioLogeado;
	    	
	    }
	    catch (Exception e)
	    {
	    		e.printStackTrace();
	    		//datosUsuarioLogin.setText("ERROR¡");
	    		//datosUsuarioNombre.setText("ERROR2!");
	    		return null;
	    }
	}//FIN BOTON AUTENTICAR
	
	//Funcionalidad relacionada con "addUsuario"
	boolean altaUsuario(Usuario nuevoUsuario){
		//creamos peticion a nuestro metodo "addUsuario"
		//int i=0;
	    //Espacio de nombres utilizado en nuestro servicio web.
		final String NAMESPACE = "http://cxf.dadire.com/";
		//Dirección URL para realizar la conexión con el servicio web.
		final String URL ="http://10.0.2.2:8080/WebServiceBIKERUNNER/services/UsuariosServiceImplPort";
		//nombre del método web concreto que vamos a ejecutar.
		final String METHOD_NAME = "addUsuario";
		//Equivalente al anterior, pero en la notación definida por SOAP.
		final String SOAP_ACTION = "http://cxf.dadire.com/addUsuario";
		
		//1.Crearemos el objeto usuario y el objto PropertyInfo que queremos enviar al servicio web.
		PropertyInfo  envio = new PropertyInfo();
		envio.setName("arg0");
		envio.setValue(nuevoUsuario);
		envio.setType(nuevoUsuario.getClass());
		//objeto SOAP
		SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);
		//le pasamos el objeto usuario
		request.addProperty(envio);
		
	    //2.Creamos contenedor SOAP(envelope) y asociarle nuestra petición.(EL SOBRE)
		SoapSerializationEnvelope envelope =
					    new SoapSerializationEnvelope(SoapEnvelope.VER11);
	    //Indicamos que es un servicio web, en mi caso no lo es, pongo a false	 
		envelope.dotNet = false;
	    envelope.setOutputSoapObject(request);
	    //Asociamos  nuestro espacio de nombres y nombre de clase "Cliente" con la clase real java
	    envelope.addMapping(NAMESPACE, "Usuario", nuevoUsuario.getClass());
	    //3.Creamos el objeto encargado de la comunicación HTTP con el servidor
	    HttpTransportSE transporte = new HttpTransportSE(URL);
	    //transporte.debug=true;
	    
	    try
	    {
	    	//llamada al servicio y envio del sobre
	    	transporte.call(SOAP_ACTION, envelope);
	    	return true;
	    }
	    catch (Exception e)
	    {
	    	return false;
	    }
		
	}
	
	
	//Funcionalidad relacionada con "getUsuario
	Usuario recuperarUsuario(String loginAComprobar){
		//creamos peticion a nuestro metodo "addUsuario"
		int i=0;
	    //Espacio de nombres utilizado en nuestro servicio web.
		final String NAMESPACE = "http://cxf.dadire.com/";
		//Dirección URL para realizar la conexión con el servicio web.
		final String URL ="http://10.0.2.2:8080/WebServiceBIKERUNNER/services/UsuariosServiceImplPort";
		//nombre del método web concreto que vamos a ejecutar.
		final String METHOD_NAME = "getUsuario";
		//Equivalente al anterior, pero en la notación definida por SOAP.
		final String SOAP_ACTION = "http://cxf.dadire.com/getUsuario";
		
		//1.Creamos Peticion (request) a nuestro método web "getUsuario"
		SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);
		//asocio el login que quiero comprobar si ya es existente en nuestro sistema.
		request.addProperty("arg0", loginAComprobar);
		
		//2.Creamos contenedor SOAP(envelope) y asociarle nuestra petición.
		SoapSerializationEnvelope envelope =
		new SoapSerializationEnvelope(SoapEnvelope.VER11);
		//Indicamos que es un servicio web, en mi caso no lo es, pongo a false	 
		envelope.dotNet = false;
		envelope.setOutputSoapObject(request);
		
		//3.Creamos el objeto encargado de la comunicación HTTP con el servidor
	    HttpTransportSE transporte = new HttpTransportSE(URL);
	    
	    try{
	    	//intentamos buscar el objeto con el login determinado
	    	//aqui es donde expulsamos la clase del login determinado
	    	transporte.call(SOAP_ACTION, envelope);
	    	//Se procesa el resultado devuelto
	    	//Recibimos del servicio web un objecto soapObject
	    	SoapObject resSoap = (SoapObject)envelope.bodyIn;
	    	//No se muy bien pq lo hago, inicializo i=0, solo devolvera un objeto..
	    	SoapObject ic = (SoapObject)resSoap.getProperty(i);
	    	//Declaro la clase donde almaceno la clase obtenida del servicio web
	    	Usuario usuarioRecuperado = new Usuario(); 
	    	//Asignamos los atributos del servicio web a nuestra clase.
	    	usuarioRecuperado.login = ic.getProperty(0).toString();
	    	usuarioRecuperado.nombre = ic.getProperty(1).toString();
	    	usuarioRecuperado.password = ic.getProperty(2).toString();
	    	usuarioRecuperado.foto=ic.getProperty(3).toString();
	    	//si el usuario existe lo devolvemos correctamente
	    	return usuarioRecuperado;
	    	
	    }
	    catch (Exception e)
	    {
	    		e.printStackTrace();
	    		return null;
	    }
		
		
	}
	//Funcion que cambia la foto de perfil de un determinado usuario
	boolean cambiarFoto(String login, String nuevaFoto){
		//creamos peticion a nuestro metodo "addUsuario"
		int i=0;
	    //Espacio de nombres utilizado en nuestro servicio web.
	    final String NAMESPACE = "http://cxf.dadire.com/";
	    //Dirección URL para realizar la conexión con el servicio web.
		final String URL ="http://10.0.2.2:8080/WebServiceBIKERUNNER/services/UsuariosServiceImplPort";
		//nombre del método web concreto que vamos a ejecutar.
		final String METHOD_NAME = "modificarFoto";
		//Equivalente al anterior, pero en la notación definida por SOAP.
		final String SOAP_ACTION = "http://cxf.dadire.com/modificarFoto";
		
		//1.Creamos Peticion (request) a nuestro método web "getUsuario"
		SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);
		//asocio el login y la nueva foto
		request.addProperty("arg0", login);
		request.addProperty("arg1", nuevaFoto);
		//2.Creamos contenedor SOAP(envelope) y asociarle nuestra petición.
		SoapSerializationEnvelope envelope =
		new SoapSerializationEnvelope(SoapEnvelope.VER11);
		//Indicamos que es un servicio web, en mi caso no lo es, pongo a false	 
		envelope.dotNet = false;
	    envelope.setOutputSoapObject(request);
	    //3.Creamos el objeto encargado de la comunicación HTTP con el servidor
	    HttpTransportSE transporte = new HttpTransportSE(URL);
	    
	    try{
	    	//aqui es donde expulsamos la clase usuario
	    	transporte.call(SOAP_ACTION, envelope);
	    	//llamada al servicio y envio del sobre
	    	transporte.call(SOAP_ACTION, envelope);
	    	return true;
	    	
	    }catch (Exception e){
	    	e.printStackTrace();
    		return false;
	    }
	}
	*/
}//FIN CLASE
	
	
	
	
	
	


